/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Hndlr;

import DataTypes.DataEvento;
import DataTypes.DataGrupo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import objetos.Even;
import objetos.Grupo;
import objetos.Rol;


/**
 *
 * @author Sebas
 */
public class HndlrGrupo {
    
    private HashMap<String,Grupo> listGrupos;
    
    private HndlrGrupo() {
        listGrupos = new HashMap<String, Grupo>();
    }
    
    public static HndlrGrupo getInstance() {
        return HndlrGrupoHolder.INSTANCE;
    }

    public void agregarUsuarioGrupo(Rol r, String nomGrupo) {
        
        Grupo gr = listGrupos.get(nomGrupo);
        gr.agregarRol(r);
    }
    
    private static class HndlrGrupoHolder {

        private static final HndlrGrupo INSTANCE = new HndlrGrupo();
    }
    
    public boolean containsKey (String key){
        return listGrupos.containsKey(key);
        
    }
    
    public void put(String key, Grupo gr){
        listGrupos.put(key, gr);
    }
    
    public ArrayList<DataGrupo> listarGrupos(){
        
        DataGrupo dg;
        ArrayList<DataGrupo> listDg = new ArrayList<DataGrupo>();
        Iterator<Grupo> itera = listGrupos.values().iterator();
        Grupo gru;
        while (itera.hasNext()){
            gru=itera.next();
            dg = new DataGrupo(gru.getNombre(), gru.getDesc(), gru.getCantParticipantes(), gru.getImg(), gru.getFechaCreacion(), gru.getMuro().getDataMuro(), gru.getDataEventos(), gru.getRoles());
            listDg.add(dg);
        }
        
        return listDg;
        
    }
    
    public Grupo obtenerGrupo(String clave){
        return listGrupos.get(clave);
    }
    
    public boolean PerteneceMiembroAgrupo(String mailUsr, String nomGrupo){
        Grupo gr = listGrupos.get(nomGrupo);
        int i = 0;
        boolean pertenece = false;
        
        while (i<gr.getUsr().size() && !pertenece){
            
            pertenece = gr.getUsr().get(i).getUsr().getCorreo().equals(mailUsr);
            i++;
            
        }
        
        return pertenece;
    }
    
    public void eliminarGrupo (String nombre) {
        listGrupos.remove(nombre);
    }
    
    public void agregarEvento (DataEvento even, String clave){
        
        Grupo gru = listGrupos.get(clave);
        gru.agregarEvento(even);
        
    }
    
    public HashMap<String,DataEvento> listarCalendarioEventos (String nom){
        
        
       if(listGrupos.isEmpty())
        return null;
        Grupo gru = listGrupos.get(nom);
        DataEvento dg;
        HashMap<String,DataEvento> listDg = new HashMap<String,DataEvento>();
        Iterator<Even> itera  = gru.getCalendarioEventos().values().iterator();
        
        while (itera.hasNext()){
            Even e = itera.next();
            dg = new DataEvento(e.getNombre(), e.getTipoEvento(),e.isRepetible(),e.getFecha(),e.getDiasDeSemana(),e.getAutor());
            listDg.put(dg.getNombre(),dg);
        }
        
        return listDg;
        
    }
    
    public void clear(){
        
        listGrupos.clear();
        
    }
    
    public HashMap<String, Grupo> listarGruposObjeto(){
        return listGrupos;
    }
 
}
